package com.zm.oes.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zm.oes.entity.Score;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface ScoreMapper {
    /**
     * 使用 @Insert 注解标记，表示这是一个插入操作
     * 向成绩表中插入一条新的成绩信息
     * 方法的参数为一个成绩对象，包含了待插入的成绩信息
     * 返回类型为操作结果的整数，并且使用 @Options 注解指定了使用自动生成的主键，并将自动生成的主键值设置到 keyProperty 指定的属性中
     */
    @Options(useGeneratedKeys = true,keyProperty = "scoreId")
    @Insert("insert into score(examCode,studentId,subject,ptScore,etScore,score,answerDate) " +
            "values(#{examCode},#{studentId},#{subject},#{ptScore},#{etScore},#{score},#{answerDate})")
    int add(Score score);

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 查询所有成绩信息，并按照成绩ID降序排列
     * 返回类型为成绩对象列表
     */
    @Select("select scoreId,examCode,studentId,subject,ptScore,etScore,score,answerDate from score order by scoreId desc")
    List<Score> findAll();

    // 分页
    @Select("select scoreId,examCode,studentId,subject,ptScore,etScore,score,answerDate from score where studentId = #{studentId} order by scoreId asc")
    IPage<Score> findById(Page<?> page, @Param("studentId") Integer studentId);

    // 不分页
//    @Select("select scoreId,examCode,studentId,subject,ptScore,etScore,score,answerDate from score where studentId = #{studentId}")
//    List<Score> findById(Integer studentId);

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 根据学生ID查询该学生的所有成绩信息，并按照成绩ID升序排列
     * 方法的参数为一个分页对象和学生ID，返回类型为带分页信息的成绩对象列表
     */
    @Select("select max(etScore) as etScore from score where examCode = #{examCode} group by studentId")
    List<Score> findByExamCode(Integer examCode);
}
